sources <- c('CBS', 'ESPN', 'Yahoo', 'FantasySharks', 'FantasyPros', 'FantasyData', 'FleaFlicker')

scrape <- scrape_data(src = sources,
                      pos=c('QB', 'RB', 'WR', 'TE', 'DST'),
                      season = 2020, 
                      week = week)
sim_lu <- map_df(1:10000, generate_lineup) %>%
  rename(pts_base = points) %>%  
  mutate(position = factor(position, 
                           levels = c("QB", "RB", "WR", "TE", "DST"))) %>% 
  select(lineup, Name, team, position, pts_base, pts_pred, sd_pts, Salary)

Results

sim_lu %>%
  filter(lineup<=3) %>%
  arrange(lineup, position, desc(pts_pred)) %>%
  knitr::kable() %>%
  kable_styling() %>%
  column_spec(1, bold=TRUE) %>%
  collapse_rows(columns = 1, valign = 'top')
lineup Name team position pts_base pts_pred sd_pts Salary
1 Lamar Jackson BAL QB 26.09591 28.056231 1.0748850 9500
Derrick Henry TEN RB 21.66090 21.818320 0.9340380 8300
Kenyan Drake ARI RB 16.18845 16.185834 0.0079857 6600
Adam Thielen MIN WR 17.71750 19.402860 1.7791200 7300
Amari Cooper DAL WR 16.58000 17.781685 1.9718580 7000
Robert Woods LAR WR 16.16750 16.272608 0.0518910 6700
Darius Slayton NYG WR 13.02250 13.209983 0.1630860 5300
Dallas Goedert PHI TE 11.68250 12.030944 0.2742810 5500
Tampa Bay Buccaneers TBB DST 7.75000 7.807355 0.2965200 3800
2 Lamar Jackson BAL QB 26.09591 27.323540 1.0748850 9500
Ezekiel Elliott DAL RB 20.80250 21.912693 0.6504630 8600
Kenyan Drake ARI RB 16.18845 16.186618 0.0079857 6600
Julio Jones ATL WR 19.87500 25.899247 2.2239000 8200
DeAndre Hopkins ARI WR 20.03500 23.217277 1.7791200 8300
Anthony Miller CHI WR 12.57250 14.091927 1.0378200 5700
Adam Humphries TEN WR 10.38500 11.245660 0.9859290 4700
Jonnu Smith TEN TE 10.74500 10.744173 0.0667170 4900
Detroit Lions DET DST 4.40000 7.269174 1.3343400 3400
3 Kyler Murray ARI QB 21.80904 24.217743 0.8924872 8000
Derrick Henry TEN RB 21.66090 22.123575 0.9340380 8300
Kenyan Drake ARI RB 16.18845 16.188116 0.0079857 6600
Davante Adams GBP WR 22.50000 21.702391 0.8895600 8600
Adam Thielen MIN WR 17.71750 20.196513 1.7791200 7300
Calvin Ridley ATL WR 17.57000 18.355824 1.3343400 7100
Danny Amendola DET WR 10.22500 13.702536 2.5352460 5200
Chris Herndon NYJ TE 11.21750 11.944508 0.2891070 5100
Tampa Bay Buccaneers TBB DST 7.75000 7.666633 0.2965200 3800
ggplotly(sim_lu %>% 
           group_by(Name, position, Salary) %>% 
           dplyr::summarize(lu = n_distinct(lineup)) %>% 
           ungroup() %>% 
           group_by(position) %>% 
           top_n(10, lu) %>% 
           ungroup() %>% 
           arrange(position, desc(lu)) %>% 
           mutate(Name = factor(Name),
                  Name = fct_reorder(Name, lu)) %>% 
           ggplot(aes(x = Name, y = round(lu / 1000, 2), fill = Salary,
                      text = paste(Name, "in", lu, "lineups with", Salary, "salary"))) +
           geom_bar(stat = "identity") +
           facet_wrap(~position, ncol = 2, scales = "free_y") +
           coord_flip() +
           scale_fill_viridis_c() +
           xlab("") +
           ylab("Lineups (thousands)") +
           ggtitle("Top 10 Players By Position")) %>% 
  ggplotly(tooltip = "text")
plyr_lu <- sim_lu %>%
  group_by(Name, position) %>%
  dplyr::summarize(lu=n_distinct(lineup)) %>%
  ungroup() 

ggplotly(projections %>% 
  filter(avg_type=='weighted') %>%
  mutate(Name = ifelse(pos=="DST", last_name, paste(first_name, last_name))) %>%
  inner_join(fan_duel, by = c("Name", "position")) %>%
  select(Name, team, position, points, Salary, sd_pts) %>%
  left_join(plyr_lu, by='Name') %>%
  replace_na(list(lu=0)) %>%
  mutate(lu_bin=ifelse(lu==0, '0 Lineups', '>=1 Lineups'),
         lu_5=cut(lu,5, labels = FALSE)) %>%
  ggplot(aes(x=Salary, y=points, color=lu_bin, size=sd_pts, text=Name)) +
  geom_point() +
  theme_minimal() +
  scale_color_manual(values = c('red', 'blue'), name="") +
  geom_smooth(inherit.aes = FALSE, aes(x=Salary, y=points), method = 'lm') +
  ylab('Projected Points') +
  xlab('Salary') +
  ggtitle('Who makes it into Optimized Lineups?') +
  scale_x_continuous(labels=scales::dollar))
sim_lu %>%
  group_by(lineup) %>%
  mutate(lineup_pts=sum(pts_pred)) %>%
  group_by(lineup, position) %>%
  mutate(n=n()) %>%
  select(lineup, position, n, lineup_pts) %>%
  distinct() %>%
  spread(key=position, value=n) %>%
  filter(RB>=2, TE>=1, WR>=3) %>%
  mutate(flex=case_when(RB==3 ~ 'RB',
                        TE==2 ~ 'TE',
                        WR==4 ~ 'WR')) %>%
  group_by(flex) %>%
  dplyr::summarize(pts=median(lineup_pts),
                   cases=n()) %>%
  knitr::kable() %>%
  kable_styling(full_width = FALSE)
flex pts cases
RB 153.6999 2216
TE 154.2694 42
WR 154.4912 7742
lu_df <- sim_lu %>%
  group_by(lineup) %>%
  dplyr::summarize(lineup_pts=sum(pts_pred),
                   lineup_sd=sum(sd_pts)) %>%
  ungroup()

pto <- psel(lu_df, low(lineup_sd) * high(lineup_pts))


ggplot(lu_df, aes(y=lineup_pts, x=lineup_sd)) +
  geom_point() +
  geom_point(data=pto, size=5) +
  ylab('Lineup Points') +
  xlab('Lineup Points St Dev') +
  ggtitle('Lineup Points vs Uncertainty',
          subtitle = 'Pareto Lineups Bolded')

psel(lu_df, low(lineup_sd) * high(lineup_pts)) %>%
  left_join(sim_lu, by='lineup') %>%
  group_by(lineup) %>%
  arrange(lineup_pts, position, desc(Salary)) %>%
  select(lineup, lineup_pts, lineup_sd, Name, team, position, pts_pred, sd_pts, Salary) %>%
  mutate_at(vars(lineup_pts, lineup_sd, pts_pred, sd_pts), function(x) round(x, 2)) %>%
  knitr::kable() %>%
  kable_styling(fixed_thead = T) %>%
  column_spec(1:3, bold=TRUE) %>%
  collapse_rows(columns = 1:3, valign = 'top') %>%
  scroll_box(height = '700px', width = '100%')
lineup lineup_pts lineup_sd Name team position pts_pred sd_pts Salary
9813 148.35 3.66 Kyler Murray ARI QB 23.08 0.89 8000
Ezekiel Elliott DAL RB 21.46 0.65 8600
Derrick Henry TEN RB 20.76 0.93 8300
Kenyan Drake ARI RB 16.19 0.01 6600
Davante Adams GBP WR 21.44 0.89 8600
Robert Woods LAR WR 16.34 0.05 6700
Darius Slayton NYG WR 13.24 0.16 5300
Jonnu Smith TEN TE 10.73 0.07 4900
Houston Texans HOU DST 5.10 0.00 3000
3856 151.86 4.15 Lamar Jackson BAL QB 26.40 1.07 9500
Derrick Henry TEN RB 22.02 0.93 8300
Kenyan Drake ARI RB 16.19 0.01 6600
Davante Adams GBP WR 23.58 0.89 8600
Robert Woods LAR WR 16.18 0.05 6700
Michael Gallup DAL WR 14.59 0.44 6000
Darius Slayton NYG WR 13.16 0.16 5300
Chris Herndon NYJ TE 11.24 0.29 5100
Tampa Bay Buccaneers TBB DST 8.51 0.30 3800
8361 152.51 4.34 Lamar Jackson BAL QB 26.92 1.07 9500
Derrick Henry TEN RB 23.37 0.93 8300
Kenyan Drake ARI RB 16.18 0.01 6600
Davante Adams GBP WR 22.20 0.89 8600
Robert Woods LAR WR 16.15 0.05 6700
T.Y. Hilton IND WR 15.73 0.86 6300
Darius Slayton NYG WR 13.27 0.16 5300
Jonnu Smith TEN TE 10.66 0.07 4900
Tampa Bay Buccaneers TBB DST 8.02 0.30 3800
3765 152.93 4.48 Dak Prescott DAL QB 22.16 0.06 8300
Derrick Henry TEN RB 22.32 0.93 8300
Kenyan Drake ARI RB 16.20 0.01 6600
Davante Adams GBP WR 23.48 0.89 8600
Adam Thielen MIN WR 19.80 1.78 7300
Robert Woods LAR WR 16.20 0.05 6700
Darius Slayton NYG WR 12.94 0.16 5300
Chris Herndon NYJ TE 11.64 0.29 5100
Tampa Bay Buccaneers TBB DST 8.20 0.30 3800
800 155.29 4.52 Lamar Jackson BAL QB 27.83 1.07 9500
Derrick Henry TEN RB 23.34 0.93 8300
Kenyan Drake ARI RB 16.19 0.01 6600
Davante Adams GBP WR 23.21 0.89 8600
Calvin Ridley ATL WR 19.32 1.33 7100
Robert Woods LAR WR 16.25 0.05 6700
Darius Slayton NYG WR 13.25 0.16 5300
Jonnu Smith TEN TE 10.79 0.07 4900
Houston Texans HOU DST 5.10 0.00 3000
683 155.63 5.96 Kyler Murray ARI QB 22.63 0.89 8000
Derrick Henry TEN RB 23.80 0.93 8300
Kenyan Drake ARI RB 16.21 0.01 6600
Davante Adams GBP WR 23.55 0.89 8600
DeAndre Hopkins ARI WR 21.38 1.78 8300
T.Y. Hilton IND WR 16.96 0.86 6300
Darius Slayton NYG WR 13.01 0.16 5300
Jonnu Smith TEN TE 10.66 0.07 4900
Indianapolis Colts IND DST 7.45 0.37 3600
2456 156.35 6.03 Lamar Jackson BAL QB 27.18 1.07 9500
Derrick Henry TEN RB 22.17 0.93 8300
Kenyan Drake ARI RB 16.19 0.01 6600
Davante Adams GBP WR 23.77 0.89 8600
Calvin Ridley ATL WR 21.04 1.33 7100
Anthony Miller CHI WR 14.44 1.04 5700
Darius Slayton NYG WR 12.81 0.16 5300
Chris Herndon NYJ TE 11.23 0.29 5100
Tampa Bay Buccaneers TBB DST 7.51 0.30 3800
1707 157.58 6.20 Lamar Jackson BAL QB 28.36 1.07 9500
Derrick Henry TEN RB 22.91 0.93 8300
Kenyan Drake ARI RB 16.19 0.01 6600
Davante Adams GBP WR 23.54 0.89 8600
DeAndre Hopkins ARI WR 23.61 1.78 8300
Darius Slayton NYG WR 13.17 0.16 5300
Adam Humphries TEN WR 10.87 0.99 4700
Jonnu Smith TEN TE 10.77 0.07 4900
Tampa Bay Buccaneers TBB DST 8.17 0.30 3800
8128 159.00 6.43 Kyler Murray ARI QB 22.98 0.89 8000
Derrick Henry TEN RB 23.01 0.93 8300
Kenyan Drake ARI RB 16.20 0.01 6600
Davante Adams GBP WR 23.08 0.89 8600
Calvin Ridley ATL WR 19.89 1.33 7100
Parris Campbell IND WR 13.01 0.58 5300
Darius Slayton NYG WR 13.11 0.16 5300
Travis Kelce KCC TE 22.62 1.63 7800
Houston Texans HOU DST 5.10 0.00 3000
8963 159.31 7.02 Lamar Jackson BAL QB 26.93 1.07 9500
Derrick Henry TEN RB 22.93 0.93 8300
Kenyan Drake ARI RB 16.18 0.01 6600
Nyheim Hines IND RB 14.70 1.59 5500
Davante Adams GBP WR 24.56 0.89 8600
Adam Thielen MIN WR 21.11 1.78 7300
Darius Slayton NYG WR 13.34 0.16 5300
Chris Herndon NYJ TE 11.19 0.29 5100
Tampa Bay Buccaneers TBB DST 8.38 0.30 3800
4966 160.34 7.45 Kyler Murray ARI QB 25.02 0.89 8000
Ezekiel Elliott DAL RB 23.19 0.65 8600
Derrick Henry TEN RB 22.80 0.93 8300
Nyheim Hines IND RB 13.36 1.59 5500
Davante Adams GBP WR 23.06 0.89 8600
Amari Cooper DAL WR 21.04 1.97 7000
Darius Slayton NYG WR 13.29 0.16 5300
Jonnu Smith TEN TE 10.73 0.07 4900
Tampa Bay Buccaneers TBB DST 7.84 0.30 3800
2412 160.62 7.73 Lamar Jackson BAL QB 27.85 1.07 9500
Derrick Henry TEN RB 24.18 0.93 8300
Tarik Cohen CHI RB 13.07 1.04 5000
Davante Adams GBP WR 23.09 0.89 8600
Julio Jones ATL WR 23.47 2.22 8200
Calvin Ridley ATL WR 19.96 1.33 7100
Darius Slayton NYG WR 13.14 0.16 5300
Jonnu Smith TEN TE 10.77 0.07 4900
Houston Texans HOU DST 5.10 0.00 3000
7385 162.00 7.83 Kyler Murray ARI QB 22.44 0.89 8000
Derrick Henry TEN RB 23.74 0.93 8300
Kenyan Drake ARI RB 16.19 0.01 6600
Davante Adams GBP WR 23.21 0.89 8600
Adam Thielen MIN WR 21.58 1.78 7300
JuJu Smith-Schuster PIT WR 22.96 2.22 7100
Anthony Miller CHI WR 15.06 1.04 5700
Jonnu Smith TEN TE 10.87 0.07 4900
New York Jets NYJ DST 5.95 0.00 3500
5218 162.03 8.03 Dak Prescott DAL QB 22.08 0.06 8300
Derrick Henry TEN RB 22.07 0.93 8300
Tarik Cohen CHI RB 12.21 1.04 5000
Davante Adams GBP WR 23.64 0.89 8600
DeAndre Hopkins ARI WR 24.66 1.78 8300
Calvin Ridley ATL WR 21.90 1.33 7100
Allen Lazard GBP WR 16.98 1.63 5600
Jonnu Smith TEN TE 10.77 0.07 4900
Tampa Bay Buccaneers TBB DST 7.71 0.30 3800
8218 162.06 9.03 Lamar Jackson BAL QB 27.92 1.07 9500
Derrick Henry TEN RB 23.37 0.93 8300
Kenyan Drake ARI RB 16.20 0.01 6600
Julio Jones ATL WR 24.77 2.22 8200
Calvin Ridley ATL WR 19.96 1.33 7100
Allen Lazard GBP WR 15.19 1.63 5600
Darius Slayton NYG WR 13.11 0.16 5300
T.J. Hockenson DET TE 13.97 1.36 5600
Tampa Bay Buccaneers TBB DST 7.57 0.30 3800
1216 162.20 9.67 Josh Allen BUF QB 25.12 1.04 8200
Derrick Henry TEN RB 21.97 0.93 8300
Kenyan Drake ARI RB 16.18 0.01 6600
Davante Adams GBP WR 25.40 0.89 8600
Julio Jones ATL WR 22.24 2.22 8200
Amari Cooper DAL WR 19.73 1.97 7000
Danny Amendola DET WR 15.72 2.54 5200
Jonnu Smith TEN TE 10.73 0.07 4900
Houston Texans HOU DST 5.10 0.00 3000
4270 162.44 Josh Allen BUF QB 22.87 1.04 8200
Kenyan Drake ARI RB 16.19 0.01 6600
Nyheim Hines IND RB 13.51 1.59 5500
Davante Adams GBP WR 22.75 0.89 8600
Julio Jones ATL WR 25.76 2.22 8200
JuJu Smith-Schuster PIT WR 23.21 2.22 7100
Calvin Ridley ATL WR 19.70 1.33 7100
Jonnu Smith TEN TE 10.82 0.07 4900
Tampa Bay Buccaneers TBB DST 7.63 0.30 3800
6902 162.92 9.95 Ryan Tannehill TEN QB 19.75 0.89 7000
Derrick Henry TEN RB 22.73 0.93 8300
Kenyan Drake ARI RB 16.19 0.01 6600
Davante Adams GBP WR 22.68 0.89 8600
DeAndre Hopkins ARI WR 26.07 1.78 8300
Adam Thielen MIN WR 20.28 1.78 7300
Danny Amendola DET WR 16.26 2.54 5200
Chris Herndon NYJ TE 12.05 0.29 5100
Miami Dolphins MIA DST 6.91 0.85 3600
3154 165.47 10.06 Lamar Jackson BAL QB 28.89 1.07 9500
Derrick Henry TEN RB 22.43 0.93 8300
Kenyan Drake ARI RB 16.19 0.01 6600
Nyheim Hines IND RB 15.62 1.59 5500
Julio Jones ATL WR 27.55 2.22 8200
Amari Cooper DAL WR 19.87 1.97 7000
T.Y. Hilton IND WR 16.22 0.86 6300
Jonnu Smith TEN TE 10.76 0.07 4900
Arizona Cardinals ARI DST 7.93 1.33 3600
3698 166.68 11.54 Josh Allen BUF QB 25.07 1.04 8200
Derrick Henry TEN RB 21.96 0.93 8300
Austin Ekeler LAC RB 16.63 0.72 6900
Calvin Ridley ATL WR 19.90 1.33 7100
John Brown BUF WR 20.16 2.02 6400
Anthony Miller CHI WR 15.28 1.04 5700
Danny Amendola DET WR 20.55 2.54 5200
Travis Kelce KCC TE 18.87 1.63 7800
Tampa Bay Buccaneers TBB DST 8.26 0.30 3800